/**
 * @author Vitor Franco do Carmo (vitor.carmo@cpmbraxis.com)
 * @since 03/08/2013
 *
 */
package br.com.vfcfw.test.functional.exemplo;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;

import br.com.vfcfw.test.BaseTesteFuncional;
import br.com.vfcfw.test.functional.BasePagina;


/**
 * @author Vitor Franco do Carmo (vitor.carmo@cpmbraxis.com)
 * @since 03/08/2013
 * 
 */
public class DeliciousLogin extends BasePagina {

    /**
     * Construtor da classe.
     */
    public DeliciousLogin() {

        super(BaseTesteFuncional.obterDriverAtual());
    }

    /**
     * Construtor da classe.
     * 
     * @param driver
     */
    public DeliciousLogin(WebDriver driver) {

        super(driver);
    }

    @FindBy(css = "input#input-username")
    WebElement loginField;

    @FindBy(css = "input#input-password")
    WebElement passwordField;

    @FindBy(css = "button.btn.btn-primary")
    WebElement signInButton;

    @FindBy(css = "a.nav-link.nav-discover")
    WebElement labelDiscover;

    @FindBy(css = "div.alert.alert-error")
    WebElement labelError;

    /**
     * Verifica se foi realizado o login com sucesso.
     * 
     * @return <tt>TRUE</tt> logou com sucesso, <tt>FALSE</tt> caso contrário.
     */
    public Boolean loginSucesso() {

        login("vfcarmo", "vidal78pp");
        comandos.esperarElementoVisivel(labelDiscover);
        return comandos.isElementoContemTexto(labelDiscover, "DISCOVER");
    }

    /**
     * Verifica se houve falha no login.
     * 
     * @return <tt>TRUE</tt> houve falha, <tt>FALSE</tt> caso contrário.
     */
    public Boolean loginFalho() {

        login("vfcarmo", "123123");
        comandos.esperarElementoVisivel(labelError);
        return comandos.isElementoContemTexto(labelError, "Incorrect username or password.");
    }

    /**
     * Realiza login com sucesso e avança para a próxima página.
     * 
     * @return {@link DeliciousManager}.
     */
    public DeliciousManager loginOk() {

        login("vfcarmo", "vidal78pp");
        return obterProximaPagina(DeliciousManager.class);
    }

    /**
     * Realiza login na página.
     * 
     * @param usuario Usuário.
     * @param senha Senha.
     */
    private void login(String usuario, String senha) {

        comandos.definirValor(loginField, usuario);
        comandos.definirValor(passwordField, senha);
        comandos.clicar(signInButton);
    }

}
